# -*- coding: utf-8 -*-

#实现高通滤波器
#1.利用scipy.fftpack fft2实施二维快速傅里叶变换（FFT），得到频域中的图像表示
#2仅保留高频分量（过滤掉低频分量）
#3.执行傅里叶逆变换，以重建图像
import numpy as np
from PIL import Image
from matplotlib import pylab
import scipy.fftpack as fp

def signaltonoise(a, axis=0, ddof=0):
    a = np.asanyarray(a)
    m = a.mean(axis)
    sd = a.std(axis=axis, ddof=ddof)
    return np.where(sd == 0, 0, m/sd)
im=np.array(Image.open('rhino.jpg').convert('L'))
pylab.figure(figsize=(10,10))
pylab.imshow(im,cmap='gray')
pylab.axis('off')
pylab.title('犀牛原始图像')
pylab.show()

#绘制犀牛原始图像频谱
freq=fp.fft2(im)
w,h=freq.shape
half_w,half_h=int(w/2),int(h/2)
freq1=np.copy(freq)
freq2=fp.fftshift(freq1)
pylab.figure(figsize=(10,10))
pylab.imshow((20*np.log10(0.1+freq2)).astype(int))
pylab.title('犀牛原始图像频谱')
pylab.show()









